package main

import "fmt"

//自定义函数：功能：交换两个数
func exchangeNum(num1 int, num2 int) {
	//基本数据类型和数组默认都是值传递的，即进行值拷贝。在函数内修改，不会影响到原来的值。
	//内部的 num1 和 num2 进行交换,与外部无关
	var t int
	t = num1
	num1 = num2
	num2 = t
}

func exchangeNum2(num1 *int, num2 *int) {
	//以值传递方式的数据类型，如果希望在函数内的变量能修改函数外的变量，
	//可以传入变量的地址&，函数内以指针的方式操作变量。从效果来看类似引用传递
	var t int
	t = *num1
	*num1 = *num2
	*num2 = t
}
func main() {
	//调用函数：交换10和20
	var num1 int = 10
	var num2 int = 20
	fmt.Printf("交换前的两个数： num1 = %v,num2 = %v \n", num1, num2)
	exchangeNum(num1, num2)
	//值传递
	fmt.Printf("交换后的两个数： num1 = %v,num2 = %v \n", num1, num2)
	//引用传递
	exchangeNum2(&num1, &num2)
	fmt.Printf("交换后的两个数： num1 = %v,num2 = %v \n", num1, num2)
}
